package cn.itsource.controller;

import cn.itsource.domain.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {

    //手动服务发现
    @Autowired
    private DiscoveryClient discoveryClient;
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/order/{id}")
    public Order getOrderByUserId(@PathVariable("id") Long id){

        //通过服务名获取所有的服务实例
        List<ServiceInstance> instances = discoveryClient
                .getInstances("ORDER-SERVICE");
        //先不考虑负载均衡调用，直接获取第一个服务实例
        ServiceInstance instance = instances.get(0);
        //动态拼接服务实例ip和端口
        String ip = instance.getHost();
        int port = instance.getPort();
        String url = "http://"+ip+":"+port+"/order/"+id;
        //以http的方式远程调用order-service的接口进行返回
        return restTemplate.getForObject(url, Order.class);
    }
}
